package com.wing.order.model.request;

import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.wing.product.model.entity.Product;
import com.wing.product.model.entity.ProductDetail;
import com.wing.product.model.request.ProductDetailAttributeForm;
import com.wing.product.model.request.ProductDetailForm;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import org.springframework.format.annotation.DateTimeFormat;

import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;

/**
 * 产品Form
 *
 * @author
 */
@Data
@NoArgsConstructor
@Accessors(chain = true)
public class ProductForm {


    /**
     * ID
     */
    private Long id;

    /**
     * 创建者
     */
    private Long creator;

    /**
     * 修改者
     */
    private Long modifier;

    /**
     * 创建人
     */
    private String creatorName;

    /**
     * 修改人
     */
    private String modifierName;

    /**
     * 商品名称
     */
    private String name;

    /**
     * 入驻企业
     */
    private Long settledCompanyId;

    /**
     * 产品类型
     */
    private Long productTypeId;

    /**
     * 产品分类名称
     */
    @TableField(exist = false)
    private String productTypeName;

    /**
     * 产品分类
     */
    private Long productCategoryId;

    /**
     * 产品分类名称
     */
    @TableField(exist = false)
    private String productCategoryName;

    /**
     * 关键词
     */
    private String keyword;

    /**
     * 卖点描述
     */
    private String sellingPointSpec;

    /**
     * 计价方式
     */
    private Product.PricingMethod pricingMethod;

    /**
     * 单位
     */
    private Long unitId;

    /**
     * 单位名称
     */
    @TableField(exist = false)
    private String unitName;

    /**
     * 扩展分类ID 多个逗号分开
     */
    @TableField(exist = false)
    private String productCategoryExtId;

    /**
     * 商品图片
     */
    private String picture;

    /**
     * 商品描述
     */
    private String description;

    /**
     * 排序
     */
    private Integer sortNumber;

    /**
     * 产品编码
     */
    private String productCode;

    /**
     * 产品品牌编号
     */
    private String brandCode;

    /**
     * 产品品牌ID
     */
    private Long brandId;

    /**
     * 产品品牌名称
     */
    private String brandName;

    /**
     * 保存前端传过来的SKU信息
     */
    @TableField(exist = false)
    private List<ProductDetailForm> productDetailForm;

    /**
     * 同步 产品数据的SKU信息(单条)
     */
    @TableField(exist = false)
    private ProductDetailForm skuObj;

    /**
     * 平台端表id
     */
    private Long idPlatform;

    /**
     * 商品SKU编码
     */
    private String skuCode;

    /**
     * 商品缩略图
     */
    private String productPic;

    /**
     * 商品规格列表
     */
    private String skuSpec;

    /**
     * 商品规格值列表
     */
    private String skuSpecValue;

    /**
     * 商品规格值名称列表
     */
    private String skuSpecValueNames;

    /**
     * 平台供货价
     */
    private BigDecimal supplyPrice;

    public interface Add{}

    public interface Update{}

    /**
     * 同步时间
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime synsTime;

    /**
     * 刀柜性质
     */
    private Product.CabinetNature cabinetNature;

    /**
     * 刀柜性质描述
     */
    @TableField(exist = false)
    private String cabinetNatureDesc;

    public String getCabinetNatureDesc() {
        return cabinetNature.getDesc();
    }

    /**
     * 刀柜性质状态
     */
    private Product.CabNatureType cabNatureType;

    /**
     * 刀柜性质状态描述
     */
    @TableField(exist = false)
    private String cabNatureTypeDesc;

    public String getCabNatureTypeDesc() {
        return cabNatureType.getDesc();
    }

    /**
     * 保存前端传过来的属性信息
     */
    @TableField(exist = false)
    private List<ProductDetailAttributeForm> productDetailAttributeForm;

    /**
     * 是否已同步：no(0,未同步);yes(1,已同步);
     */
    private Integer isSyns;

    /**
     * 市场指导价
     */
    private BigDecimal marketPrice;

    /**
     * 寿命单位
     */
    private String lifeUnit;
    /**
     * 使用寿命
     */
    private Integer lifeSpan;

    private String inventoryUnitType;

    private Boolean returnType;

    private String storageKnifeType;

    /**
     * 供应商id
     */
    private Long supplierId;

    /**
     * 包装方式id
     */
    private Long packId;

    /**
     * 归还时长阈值
     */
    private Integer returnThreshold;

    /**
     * 呆滞时长阈值
     */
    private Integer lethargyThreshold;

    private String remark;

    private Integer warningQuantity;

    /**
     * 产品id
     */
    private Long productId;

    /**
     * 规格码
     */
    private String specCode;

    /**
     * 基础单位单价
     */
    private BigDecimal basePrice;

    /**
     * 基础单位数量
     */
    private Integer baseQuantity;
}
